本文主要介绍AoA reader 的模型结构,由论文《Attention-over-Attention Neural Networks for Reading Comprehension》提出,论文直通车
1 论文概述
该论文针对机器阅读理解任务,提出了AoA reader模型,在CNN/Daily Mail 和CBT数据集上取得了不错的效果。
2 模型细节
模型的结构图如上图所示,主要包含了以下几个模块:
- 上下文编码模块(Contextual Embedding)
- 两两匹配模块(Pair-wise Matching Score)
- 独立注意力模块(Individual Attentions)
- AoA模块(Attention-over-Attention)
- 最终预测模块(Final Predictions)
接下来就逐一介绍这些组成部分。
(1)上下文编码模块
对于问题和文章的表示,整体来说使用的文本表示法中的模型1的方法(即不对文章或者问题的整体语义信息建模,而是对文本中的单词序列逐一表示)。本文中的具体做法是,首先先将文章和问题分别表示成one-hot形式,然后使用词向量矩阵将问题和文章中的one-hot形式转化为向量形式(注意,在具体实现的过程中,使用的随机初始化词向量矩阵而没有使用预训练),最后将这些向量序列送入BiRNN,最后每个单词的表示是由该单词的前向和后向隐层状态拼接得到的,这三个步骤可以用下面的几个公式来表示:
然后使用$h_{doc} \in R^{|D|2d}$和$h_{query} \in R^{|Q|2d}$分别表示文章和问题的上下文表示。
(2)两两匹配模块(Pair-wise Matching Score)
这部分的操作很简单,利用点乘操作来得到文章中的一个词和问题中一个词的匹配程度。具体来说,给定文章中第i个单词以及问题中的第j个单词,将这两个向量进行点乘得到一个标量,这个标量就表示这两个向量之间的匹配程度。公式如下:
其实在这个公式里面,点乘是对应元素相乘后相加,个人感觉公式是有些问题的,公式中使用了转置,是矩阵乘法,那么就不应该再使用$\ \cdot \ $了,而应该使用$ $,我也不清楚是不是我理解错了,反正最后得到的是一个标量。
将文章的单词和问题中的单词两两配对,得到矩阵$M(i,j) \in R^{|D||Q|}$,也就是下面这个:
(3)独立注意力模块
在得到文章和问题的单词两两匹配矩阵后,对每一列使用一个softmax函数,这样做的意义是,对于问题中$t$时刻的单词,得到一个独立的文档级的注意力(通俗点理解就是对于问题中的某一个单词,文章中的每个单词与该单词的相关程度)。操作的示意图如下:
对应的公式也很简单,首先是得到每一列处理后的结果
将处理后的每一列进行拼接:
$a=[a(1),a(2),…,a(|Q|)]$
(4)AoA模块
这个模块很有意思,也是这篇论文的亮点,利用注意力来对注意力权重进行加权求和。它首先计算一个相反的注意力,具体来说,在前面那个M矩阵的行上使用softmax函数,表示的含义就变成了给定一个文章中的单词,问题中的那些单词对其的重要性,这样的操作的话,就会得到$|D|$个行向量,然后对这些向量求一个平均。
公式为:
这样就得到了上图右边的那个小向量。
接着就是重点了,$a$一个注意力权重矩阵,$ \beta $是一个权重向量,将$a$和$ \beta $做点乘,这样就得到了“attended document-level attention”,这个操作就是the attention-over-attention mechanism,AoA实质上就是利用注意力来对另一个层次的注意力加权求和。
表达式为$s=a^T \beta $,这里的公式表示我也觉得有点问题。
(5)预测模块
预测模块和AS reader 的预测模块很相似,将某个单词在全文中出现地方的权重信息都加起来:
其中$I(w,D)$表示单词w在文章D中出现的位置集合。
最后目标函数如下:
本文也使用了“N-best Re-ranking Strategy”来选择最终的答案,这里就不做介绍了。